package cdu.sl.common.utils;

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Component;

/**
 * 密码加密工具类，使用BCrypt算法
 * BCrypt是一种安全的自适应哈希算法，专为密码存储设计，具有以下特点：
 * 1. 自动生成随机盐值，每次加密结果不同
 * 2. 计算强度可调整，可以抵抗彩虹表和暴力破解攻击
 * 3. 内含盐值，无需单独存储盐值
 */
@Component
public class PasswordEncoder {

    private static final BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();

    /**
     * 加密密码
     * @param rawPassword 原始密码
     * @return 加密后的密码
     */
    public String encode(String rawPassword) {
        return encoder.encode(rawPassword);
    }


    /**
     * 验证密码是否匹配
     * @param rawPassword 原始密码
     * @param encodedPassword 加密后的密码
     * @return 是否匹配
     */
    public boolean matches(String rawPassword, String encodedPassword) {
        return encoder.matches(rawPassword, encodedPassword);
    }

}